package org.mcs.controlador.mantenimiento;   
import java.io.IOException;
import java.io.OutputStream;
import java.util.List; 

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.google.gson.Gson;

import emp.entidades.EntAlmacen;
import emp.entidades.EntEmpresa; 
import emp.entidades.EntUbigeo; 
import emp.jsf.servicio.AlmacenService; 
import emp.jsf.servicio.EmpresaService;
import emp.jsf.servicio.UbigeoService; 

@Controller  
public class AlmacenController {

	@Autowired
	AlmacenService almacenService;
	 
	@Autowired
	EmpresaService empresaService;
	
	@Autowired
	UbigeoService ubigeoService;
	
	
	public static String URL_PAGINA="almacen-mnt"; 
	
	  @RequestMapping(method=RequestMethod.GET, value="/almacen")
	   public ModelAndView carga() {
		  EntAlmacen almacen=new EntAlmacen();   
		  almacen.setEntEmpresa(new EntEmpresa());
		  almacen.setEntUbigeo(new EntUbigeo());
		  ModelAndView mov= new ModelAndView(URL_PAGINA, "command",almacen);
//		  mov.addObject("listaPerfil",perfilService.listarPerfil());
		  cargarDatos(mov);
		  return mov;
	   }
	  
	  
	  public void cargarDatos(ModelAndView mov){
		  mov.addObject("listaDepartamentos",ubigeoService.listarDepartamentos());
	  }
	  
	  @RequestMapping(method=RequestMethod.GET, value="almacen/lista") 
	   public   void lista( HttpServletResponse response  ) throws IOException { 
		  List<EntAlmacen> listaAlmacen=almacenService.listarAlmacenes();
		  for(EntAlmacen u:listaAlmacen){
			  EntUbigeo p=new EntUbigeo();
			  p.setId(u.getEntUbigeo().getId());
			  p.setDescripcion(u.getEntUbigeo().getDescripcion());
			  p.setNivel(u.getEntUbigeo().getNivel());
			  u.setEntUbigeo(p);
			  u.setEntEmpresa(null);
		  } 
			Gson gson = new Gson(); 
	  		String resultado=gson.toJson(listaAlmacen);
	  		
	  		OutputStream os = response.getOutputStream();
			byte[] content =resultado.getBytes();
			os.write(content);
			response.setContentType("text/html;charset=iso-8859-1");
			response.setContentLength(content.length);  
	   }
	  
	  
	  @RequestMapping(method=RequestMethod.GET, value="almacen/ubigeos/{id}") 
	   public  void listaubigeo(HttpServletResponse response,@PathVariable String id) throws IOException { 
		  	List<EntUbigeo> lista=ubigeoService.listarProvincias(id);
		  	Gson gson = new Gson(); 
	  		String resultado=gson.toJson(lista);
	  		
	  		OutputStream os = response.getOutputStream();
			byte[] content =resultado.getBytes();
			os.write(content);
			response.setContentType("text/html;charset=iso-8859-1");
			response.setContentLength(content.length); 
	   }
	  
	  
	  
	  @RequestMapping(method=RequestMethod.GET, value="almacen/ubigeopadre/{id}") 
	   public   void listaubigeopadre(HttpServletResponse response,@PathVariable String id) throws IOException { 
		  	List<EntUbigeo> lista=ubigeoService.listarUbigeoNivelPadre(id);
		  	Gson gson = new Gson(); 
	  		String resultado=gson.toJson(lista);
	  		
	  		OutputStream os = response.getOutputStream();
			byte[] content =resultado.getBytes();
			os.write(content);
			response.setContentType("text/html;charset=iso-8859-1");
			response.setContentLength(content.length); 
	   }
	  
	  @RequestMapping(value = "almacen/nuevo", method = RequestMethod.POST)
	   public ModelAndView nuevo(@ModelAttribute("SpringWeb")EntAlmacen almacen, ModelMap model, final RedirectAttributes redirectAttributes) {
		  EntAlmacen almacenNuevo=new EntAlmacen();   
		  almacenNuevo.setEntEmpresa(new EntEmpresa());
		  almacenNuevo.setEntUbigeo(new EntUbigeo());
		  ModelAndView mov=new ModelAndView(URL_PAGINA, "command",almacenNuevo ); 
		  try { 
			  if(almacen!=null && almacen.getNombre()!=null){ 
				  		  EntEmpresa e=empresaService.listarEmpresas().get(0);//reemplazar por otra logica
				  		  almacen.setEntEmpresa(e);
						  EntAlmacen almacenGrabado=almacenService.grabarAlmacen(almacen);
					      if(almacenGrabado.getId()==null){ 
					    	  mov.addObject( "messageerror","Error al grabar. Vuelva a intentarlo");
					      }
			  }
			} catch (Exception e) { 
				mov.addObject(  "messageerror","Error generico. Si el problema persiste contacte a soporte"); 
				e.printStackTrace();
			}finally{
				cargarDatos(mov);
				return mov;
			}
	   }
	  
	  
	  @RequestMapping(value = "almacen/modifica", method = RequestMethod.POST)
	   public ModelAndView modifica(@ModelAttribute("SpringWeb")EntAlmacen almacen, ModelMap model, final RedirectAttributes redirectAttributes) {
		  EntAlmacen almacenNuevo=new EntAlmacen();   
		  almacenNuevo.setEntEmpresa(new EntEmpresa());
		  almacenNuevo.setEntUbigeo(new EntUbigeo());
		  ModelAndView mov=new ModelAndView(URL_PAGINA, "command",almacenNuevo);

		  try {
			  
			  if(almacen!=null && almacen.getNombre()!=null){
				  		  EntEmpresa e=empresaService.listarEmpresas().get(0);//reemplazar por otra logica
				  		  almacen.setEntEmpresa(e);
						  EntAlmacen almacenGrabado=almacenService.ActualizarAlmacen(almacen);
					      if(almacenGrabado.getId()==null){ 
					    	  mov.addObject( "messageerror","Error al grabar. Vuelva a intentarlo");
					      }
					       
			  }
			} catch (Exception e) { 
				mov.addObject(  "messageerror","Error generico. Si el problema persiste contacte a soporte"); 
				e.printStackTrace();
			}finally{
				cargarDatos(mov);
				return mov;
			}
	   }
	  
	 
	  @RequestMapping(method=RequestMethod.POST, value="almacen/eliminar") 
	   public  ModelAndView eliminar(@ModelAttribute("id")String id, ModelMap model, final RedirectAttributes redirectAttributes) {
		  ModelAndView mov=new ModelAndView(URL_PAGINA, "command",new EntAlmacen() );
		  try {  
			  	almacenService.eliminar(id);
		  	} catch (Exception e) { 
				mov.addObject(  "messageerror","Error generico. Si el problema persiste contacte a soporte");
				e.printStackTrace();
			}
	  		return mov; 
	   }
	 
}
